<html>
    <head>
        <title>WebSocket</title>
    </head>
    <body>
        <script>
            /*
                一、uni.connectSocket(OBJECT)

                        创建一个WebSocket 链接。

                        (在各个小程序平台运行时，网络相关的 API 在使用前需要配置域名白名单)

                        uni-app的socket，分全局socket和socketTask。全局socket只能有一个，一旦被占用就无法再开启。所以不推荐使用全局socket，一般使用socketTask。

                        小程序上，socketTask也有数量限制，具体需要参阅各家小程序文档。

                        
                        ★注意： 小程序的运行日志回显、uniPush的小程序版，均基于socket，都会占用socketTask通道数量。运行日志回显是可以关闭的，详见


                        1、connectSocket 兼容性

                                    HarmonyOS
                                    HBuilderX 4.23

                                    <1>、Object 参数说明

                                                参数名	        类型	        必填	    说明	                                                    平台差异说明

                                            ①、url	            String	        是	    服务器接口地址	                                            小程序中必须是 wss:// 协议
                                            
                                            ②、multiple	        Boolean	        否	    是否多实例。传入 true 时，将返回一个包含 SocketTask 实例。	  仅支付宝小程序支持
                                            
                                            ③、header	        Object	        否	    HTTP Header , header 中不能设置 Referer	                    小程序、App 2.9.6+
                                            
                                            ④、method	        String	        否	    默认是GET，有效值：OPTIONS, GET, 
                                                                                        HEAD, POST, PUT, DELETE, TRACE, CONNECT	                   仅微信小程序支持
                                            
                                            ⑤、protocols	 Array<String>	    否	    子协议数组	                                        App、H5、微信小程序、百度小程序、抖音小程序、飞书小程序

                                            ⑥、success	        Function	    否	    接口调用成功的回调函数	
                                            
                                            ⑦、fail	            Function	    否	    接口调用失败的回调函数	
                                            
                                            ⑧、complete	        Function	    否	    接口调用结束的回调函数（调用成功、失败都会执行）
                    

                                    <2>、示例代码

                                                uni.connectSocket({
                                                    url: 'wss://www.example.com/socket',
                                                    header: {
                                                        'content-type': 'application/json'
                                                    },
                                                    protocols: ['protocol1'],
                                                    method: 'GET'
                                                })

                                    <3>、返回值

                                                如果希望返回一个 socketTask 对象，需要至少传入 success /fail /complete 参数中的一个

                                                例如：

                                                        var socketTask = uni.connectSocket({
                                                            url:'wss//www.example.com/socket', 
                                                            complete:()=>{}
                                                        })

                                                如果没有传入 success / fail / complete 参数，则会返回封装后的 Promise 对象：Promise 封装(https://uniapp.dcloud.net.cn/api/index.html#promise-%E5%B0%81%E8%A3%85)


                                    <4>、注意事项：

                                                ①、网络请求的 超时时间 可以统一在 manifest.json 中配置 networkTimeout。
                                            
                                                ②、App平台，2.2.6以下的版本，不支持 ArrayBuffer 类型的数据收发。老版本不愿升级也可以使用 plus-websocket插件 插件替代。

                                                ③、App平台2.2.6以下的版本，所有 vue 页面只能使用一个 websocket 连接。App下可以使用 plus-websocket 插件替代实现多连接。

                                                ④、微信小程序平台1.7.0 及以上版本，最多可以同时存在5个WebSocket 连接。老版本只支持一个socket连接。

                                                ⑤、百度小程序平台自基础库版本 1.9.4 及以后支持多个socket连接。老版本只支持一个socket连接。

                                                ⑥、QQ小程序、支付宝小程序平台最多支持同时存在5个socket连接。

                                                ⑦、uni-push2.0在web、小程序以及APP的非离线模式下的底层实现都是基于一个socket。
                                                
                                                    如果你的项目需要再次使用socket，请通过socketTask实现


                        2、返回值

                                 返回值类型：  SocketTask

                                 <1>、SocketTask 的方法

                                            ①、send(options:SendSocketMessageOptions):void

                                                    通过 WebSocket 连接发送数据

                                                    ★、send 兼容性

                                                            HarmonyOS
                                                            HBuilderX 4.23

                                                    ★、参数 HarmonyOS 兼容性

                                                            SendSocketMessageOptions 是一个对象数组：

                                                                    名称	         类型	                必填	默认值	兼容性	描述
                                                                    options	  SendSocketMessageOptions	    是	    -	    -	    -

                                                            △、对象数组中对象的结构为：

                                                                       名称	                  类型	                            必填	默认值	兼容性	描述

                                                                    ①、data	                any	                                 是	    -               需要发送的内容, app平台从 4.61 版本开始支持ArrayBuffer

                                                                    ③、success	        (result: GeneralCallbackResult) => void	 否 	null	        接口调用成功的回调函数

                                                                    ⑤、fail	            (result: SendSocketMessageFail) => void	 否	    null	        接口调用失败的回调函数

                                                                    ⑦、complete	        (result: any) => void	                 否	    null	        接口调用结束的回调函数（调用成功、失败都会执行）


                                                            △、SendSocketMessageFail 的属性值

                                                                        名称	    类型	必填	默认值	兼容性	    描述

                                                                    ①、errCode	    number	是	    -	    -	    错误码

                                                                    ②、errSubject	string	是	    -	    -	    统一错误主题（模块）名称

                                                                    ③、data	        any	    否	    -	    -	    错误信息中包含的数据

                                                                    ④、cause	    Error	否	    -	    -	    源错误信息，可以包含多个错误，详见SourceError

                                                                    ⑤、errMsg	    string	是	    -	    -	    -

                                            ②、close(options:CloseSocketOptions):void
                                            
                                                      关闭 WebSocket 链接

                                                      ★、close 兼容性

                                                              HarmonyOS
                                                              HBuilderX 4.23

                                                      ★、参数 HarmonyOS 兼容性
                                                      
                                                              CloseSocketOptions 是一个对象数组：

                                                                    名称	类型	必填	默认值	兼容性	描述
                                                                    options	CloseSocketOptions	是	-	-	-

                                                              对象数组中对象的机构为：

                                                                                名称	            类型	                        必填	默认值	兼容性	        描述

                                                                            ①、code	                number	                        否	    1000	        一个数字值表示关闭连接的状态号，表示连接被关闭的原因。
                                                                                                                                                            如果这个参数没有被指定，默认的取值是1000 （表示正常连接关闭）
                                                                            
                                                                            ②、reason	            string	                        否	    ""	            一个可读的字符串，表示连接被关闭的原因。
                                                                                                                                                            这个字符串必须是不长于123字节的UTF-8 文本（不是字符）
                                                                            
                                                                            ④、success	(result: GeneralCallbackResult) => void	    否	    null	        接口调用成功的回调函数
                                                                            
                                                                            ⑥、fail	    (result: GeneralCallbackResult) => void	    否	    null	        接口调用失败的回调函数
                                                                            
                                                                            ⑦、complete	(result: GeneralCallbackResult) => void	    否	    null	        接口调用结束的回调函数（调用成功、失败都会执行）  


                                            ③、onOpen(callback:(result:OnSocketOpenCallbackResult)=>void) :void：

                                                        监听 WebSocket 连接打开事件

                                                        ★、onOpen 兼容性

                                                                        HarmonyOS
                                                                        HBuilderX 4.23

                                                        ★、参数 HarmonyOS 兼容性

                                                                        名称	    类型	                                    必填	默认值	兼容性	描述

                                                                      callback	(result: OnSocketOpenCallbackResult) => void	是	    -	    -	    -

                                                                      △、OnSocketOpenCallbackResult 的属性值

                                                                                名称	    类型	必填	默认值	兼容性	描述
                                                                                header	    any	    是	    -               连接成功的 HTTP 响应 Header


                                             ④、onClose(callback: (result: any) => void):void

                                                        监听 WbeSocket 连接关闭事件

                                                        ★、onClose 兼容性

                                                                HarmonyOS
                                                                HBuilderX 4.23

                                                        ★、参数 HarmonyOS 兼容性

                                                                        名称	        类型	        必填	默认值	兼容性	描述
                                                                    callback	(result: any) => void	是	    -	    -	    -

                                              ⑤、onError(callback: (result: GeneralCallbackResult) => void): void;

                                                        监听 WebSocket 错误

                                                        ★、onError 兼容性

                                                                HarmonyOS
                                                                HBuilderX 4.23

                                                        ★、参数 HarmonyOS 兼容性

                                                                名称	    类型	                                    必填	默认值	兼容性	描述
                                                              callback (result: GeneralCallbackResult) => void	        是	    -	    -	    -

                                              ⑥、onMessage(callback: (result: OnSocketMessageCallbackResult) => void): void;

                                                        监听WebSocket 接受到服务器的消息事件

                                                        ★、onMessage 兼容性

                                                                HarmonyOS
                                                                HBuilderX 4.23

                                                        ★、参数 HarmonyOS 兼容性

                                                                    名称	        类型	                                    必填	默认值	兼容性	描述
                                                                callback	(result: OnSocketMessageCallbackResult) => void	    是	    -	    -	    -

                                                                △、OnSocketMessageCallbackResult 的属性值

                                                                            名称	类型	必填	默认值	兼容性	描述
                                                                            data	any	    是	    -	          服务器返回的消息, app平台从 4.61 版本开始支持ArrayBuffer
            */


            /*
                二、uni.onSocketOpen(CallBack)

                          监听WebSocket连接打开事件。  (已废弃，使用 SocketTask 的 onOpen 替换。)

                          1、平台兼容性

                                抖音小程序不支持

                          2、onSocketOpen 兼容性
                                    
                                            HarmonyOS
                                            HBuilderX 4.23

                           3、CALLBACK 返回参数

                                            属性	    类型	 说明
                                            header	 Object	    连接成功的 HTTP 响应 Header

                           4、示例代码：

                                    uni.connectSocket({
                                        url: 'wss://www.example.com/socket'
                                    });

                                    uni.onSocketOpen(function (res) {
                                        console.log('WebSocket连接已打开！');
                                    });
            */

            /*
                三、uni.onSocketError(CALLBACK)

                          监听WebSocket错误。(已废弃，使用 SocketTask 的 onError 替换。)

                           1、平台兼容性

                                    抖音小程序不支持

                           2、onSocketError 兼容性

                                    HarmonyOS
                                    HBuilderX 4.23


                           3、示例代码：

                                    uni.connectSocket({
                                        url: 'wss://www.example.com/socket'
                                    });

                                    uni.onSocketOpen(function (res) {
                                        console.log('WebSocket连接已打开！');
                                    });

                                    uni.onSocketError(function (res) {
                                        console.log('WebSocket连接打开失败，请检查！');
                                    });
                          
                          
            */


            /*
                四、uni.sendSocketMessage(OBJECT)

                                 通过 WebSocket 连接发送数据，需要先 uni.connectSocket，并在 uni.onSocketOpen 回调之后才能发送。
                                 
                                 (已废弃，使用 SocketTask 的 send 替换。)

                                 1、平台兼容性

                                            抖音小程序不支持

                                 2、sendSocketMessage 兼容性

                                            HarmonyOS
                                            HBuilderX 4.23

                                 3、OBJECT 参数说明：

                                              参数名	        类型	                    必填	    说明

                                            ①、data	    String/ArrayBuffer	                是	    需要发送的内容

                                            ②、success	    Function	                    否	    接口调用成功的回调函数

                                            ③、fail	        Function	                    否	    接口调用失败的回调函数

                                            ④、complete	    Function	                    否	    接口调用结束的回调函数（调用成功、失败都会执行）

                                 4、示例代码：

                                                var socketOpen = false;
                                                var socketMsgQueue = [];

                                                uni.connectSocket({
                                                    url: 'wss://www.example.com/socket'
                                                });

                                                uni.onSocketOpen(function (res) {
                                                    socketOpen = true;
                                                    for (var i = 0; i < socketMsgQueue.length; i++) {
                                                        sendSocketMessage(socketMsgQueue[i]);
                                                    }
                                                    socketMsgQueue = [];
                                                });

                                                function sendSocketMessage(msg) {
                                                    if (socketOpen) {
                                                        uni.sendSocketMessage({
                                                        data: msg
                                                        });
                                                    } else {
                                                        socketMsgQueue.push(msg);
                                                    }
                                                } 

                                ★、注意事项：  

                                            出于性能的权衡，在Android端底层实现上发送队列占用的内存不能超过16M，一旦超过将导致连接被关闭。
            */

            /*
                 五、uni.onSocketMessage(CALLBACK)

                                监听WebSocket接受到服务器的消息事件。

                                （已废弃，使用 SocketTask 的 onClose 替换。）

                                1、平台兼容性

                                            抖音小程序不支持

                                2、onSocketClose 兼容性
                                            HarmonyOS
                                            HBuilderX 4.23

                                3、示例

                                        uni.connectSocket({
                                            url: 'wss://www.example.com/socket'
                                        });

                                        // 注意这里有时序问题，
                                        // 如果 uni.connectSocket 还没回调 uni.onSocketOpen，而先调用 uni.closeSocket，那么就做不到关闭 WebSocket 的目的。
                                        // 必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。
                                        uni.onSocketOpen(function () {
                                            uni.closeSocket();
                                        });

                                        uni.onSocketClose(function (res) {
                                            console.log('WebSocket 已关闭！');
                                        });
            */
        </script>
    </body>
</html>